<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<!-- Copyright 1997 The Open Group, All Rights Reserved -->
<title>&lt;sys/socket.h&gt;</title>
</head><body bgcolor=white>
<center>
<font size=2>
The Single UNIX &reg; Specification, Version 2<br>
Copyright &copy; 1997 The Open Group

</font></center><hr size=2 noshade>
<h4>NAME</h4><blockquote>
sys/socket.h - Internet Protocol family
</blockquote><h4>SYNOPSIS</h4><blockquote>
<pre><code>

#include &lt;sys/socket.h&gt;
</code>
</pre>
</blockquote><h4>DESCRIPTION</h4><blockquote>
<i>&lt;sys/socket.h&gt;</i>
makes available a type, 
<B>socklen_t</B>,
which is an unsigned opaque integral type of length of at
least 32 bits. 
To forestall portability problems, it
is recommended that applications should not use values
larger than 2<SMALL><SUP>32</SUP></SMALL> - 1.
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the unsigned integral type
<B>sa_family_t</B>.
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the
<B>sockaddr</B>
structure that includes at least the following members:
<pre>
<code>
sa_family_t   sa_family       address family
char          sa_data[]       socket address (variable-length data)
</code>
</pre>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the
<B>msghdr</B>
structure that includes at least the following members:
<pre>
<code>
void         *msg_name        optional address
socklen_t     msg_namelen     size of address
struct iovec *msg_iov         scatter/gather array
int           msg_iovlen      members in msg_iov
void         *msg_control     ancillary data, see below
socklen_t     msg_controllen  ancillary data buffer len
int           msg_flags       flags on received message
</code>
</pre>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the
<B>cmsghdr</B>
structure that includes at least the following members:
<pre>
<code>
socklen_t     cmsg_len        data byte count, including the cmsghdr
int           cmsg_level      originating protocol
int           cmsg_type       protocol-specific type
</code>
</pre>
Ancillary data consists of a sequence of pairs, each consisting of a
<B>cmsghdr</B>
structure followed by a data array.  The data array contains the ancillary
data message, and the
<B>cmsghdr</B>
structure contains descriptive information that allows an application to
correctly parse the data.
<p>
The values for
<B>cmsg_level</B>
will be legal values for the level argument to the
<i><a href="getsockopt.html">getsockopt()</a></i>
and
<i><a href="setsockopt.html">setsockopt()</a></i>
functions.  The system documentation should specify the
<B>cmsg_type</B>
definitions for the supported protocols.
<p>
Ancillary data is also possible at the socket level.  The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macro for use as the
<B>cmsg_type</B>
value when
<B>cmsg_level</B>
is SOL_SOCKET:
<dl compact>

<dt>SCM_RIGHTS<dd>Indicates that the data array contains the access rights to be sent or
received.

</dl>
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macros to gain access to the
data arrays in the ancillary data associated with a message header:
<dl compact>

<dt>CMSG_DATA(<I>cmsg</I>)<dd>If the argument is a pointer to a
<B>cmsghdr</B>
structure, this macro returns an unsigned character pointer to the data array
associated with the
<B>cmsghdr</B>
structure.

<dt>CMSG_NXTHDR(<I>mhdr,cmsg</I>)<dd><br>
If the first argument is a pointer to a
<B>msghdr</B>
structure and the second argument is a pointer to a
<B>cmsghdr</B>
structure in the ancillary data, pointed to
by the
<B>msg_control</B>
field of that
<B>msghdr</B>
structure, this macro returns a pointer to the next
<B>cmsghdr</B>
structure, or a null pointer if this structure is the last
<B>cmsghdr</B>
in the ancillary data.

<dt>CMSG_FIRSTHDR(<I>mhdr</I>)<dd><br>
If the argument is a pointer to a
<B>msghdr</B>
structure, this macro returns a pointer to the first
<B>cmsghdr</B>
structure in the ancillary data associated with this
<B>msghdr</B>
structure, or a null pointer if there is no ancillary data associated with the
<B>msghdr</B>
structure.

</dl>
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the
<B>linger</B>
structure that includes at least the following members:
<pre>
<code>
int         l_onoff          indicates whether linger option is enabled
int         l_linger         linger time, in seconds
</code>
</pre>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macros, with distinct integral values:
<dl compact>

<dt>SOCK_DGRAM<dd>Datagram socket

<dt>SOCK_STREAM<dd>Byte-stream socket

<dt>SOCK_SEQPACKET<dd>Sequenced-packet socket

</dl>
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macro for use as the <I>level</I> argument of
<i><a href="setsockopt.html">setsockopt()</a></i>
and
<i><a href="getsockopt.html">getsockopt()</a></i>.
<dl compact>

<dt>SOL_SOCKET<dd>Options to be accessed at socket level, not protocol level.

</dl>
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macros, with distinct integral values,
for use as the
<I>option_name</I>
argument in
<i><a href="getsockopt.html">getsockopt()</a></i>
or
<i><a href="setsockopt.html">setsockopt()</a></i>
calls:
<dl compact>

<dt>SO_ACCEPTCONN<dd>Socket is accepting connections.

<dt>SO_BROADCAST<dd>Transmission of broadcast messages is supported.

<dt>SO_DEBUG<dd>Debugging information is being recorded.

<dt>SO_DONTROUTE<dd>bypass normal routing

<dt>SO_ERROR<dd>Socket error status.

<dt>SO_KEEPALIVE<dd>Connections are kept alive with periodic messages.

<dt>SO_LINGER<dd>Socket lingers on close.

<dt>SO_OOBINLINE<dd>Out-of-band data is transmitted in line.

<dt>SO_RCVBUF<dd>Receive buffer size.

<dt>SO_RCVLOWAT<dd>receive "low water mark"

<dt>SO_RCVTIMEO<dd>receive timeout

<dt>SO_REUSEADDR<dd>Reuse of local addresses is supported.

<dt>SO_SNDBUF<dd>Send buffer size.

<dt>SO_SNDLOWAT<dd>send "low water mark"

<dt>SO_SNDTIMEO<dd>send timeout

<dt>SO_TYPE<dd>Socket type.

</dl>
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macros, with distinct integral values, for use as
the valid values for the
<B>msg_flags</B>
field in the
<B>msghdr</B>
structure, or the flags parameter in
<i><a href="recvfrom.html">recvfrom()</a></i>,
<i><a href="recvmsg.html">recvmsg()</a></i>,
<i><a href="sendto.html">sendto()</a></i>
or
<i><a href="sendmsg.html">sendmsg()</a></i>
calls:
<dl compact>

<dt>MSG_CTRUNC<dd>Control data truncated.

<dt>MSG_DONTROUTE<dd>Send without using routing tables.

<dt>MSG_EOR<dd>Terminates a record (if supported by the protocol).

<dt>MSG_OOB<dd>Out-of-band data.

<dt>MSG_PEEK<dd>Leave received data in queue.

<dt>MSG_TRUNC<dd>Normal data truncated.

<dt>MSG_WAITALL<dd>Wait for complete message.

</dl>
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macros, with distinct integral values:
<dl compact>

<dt>AF_UNIX<dd>UNIX domain sockets

<dt>AF_UNSPEC<dd>Unspecified 

<dt>AF_INET<dd>Internet domain sockets

</dl>
<p>
The
<i>&lt;sys/socket.h&gt;</i>
header defines the following macros, with distinct integral values:
<dl compact>

<dt>SHUT_RD<dd>Disables further receive operations.

<dt>SHUT_WR<dd>Disables further send operations.

<dt>SHUT_RDWR<dd>Disables further send and receive operations.

</dl>
<p>
The following are declared as functions, and may also be defined as macros:
<pre>
<code>
int     <a href="accept.html">accept</a>(int <I>socket</I>, struct sockaddr *<I>address</I>,
             socklen_t <I>*address_len</I>);
int     <a href="bind.html">bind</a>(int <I>socket</I>, const struct sockaddr *<I>address</I>,
             socklen_t <I>address_len</I>);
int     <a href="connect.html">connect</a>(int <I>socket</I>, const struct sockaddr *<I>address</I>,
             socklen_t <I>address_len</I>);
int     <a href="getpeername.html">getpeername</a>(int <I>socket</I>, struct sockaddr *<I>address</I>,
             socklen_t *<I>address_len</I>);
int     <a href="getsockname.html">getsockname</a>(int <I>socket</I>, struct sockaddr *<I>address</I>,
             socklen_t *<I>address_len</I>);
int     <a href="getsockopt.html">getsockopt</a>(int <I>socket</I>, int <I>level</I>, int <I>option_name</I>,
             void *<I>option_value</I>, socklen_t *<I>option_len</I>);
int     <a href="listen.html">listen</a>(int <I>socket</I>, int <I>backlog</I>);
ssize_t <a href="recv.html">recv</a>(int <I>socket</I>, void *<I>buffer</I>, size_t <I>length</I>, int <I>flags</I>);
ssize_t <a href="recvfrom.html">recvfrom</a>(int <I>socket</I>, void *<I>buffer</I>, size_t <I>length</I>,
             int <I>flags</I>, struct sockaddr *<I>address</I>, socklen_t *<I>address_len</I>);
ssize_t <a href="recvmsg.html">recvmsg</a>(int <I>socket</I>, struct msghdr *<I>message</I>, int <I>flags</I>);
ssize_t <a href="send.html">send</a>(int <I>socket</I>, const void *<I>message</I>, size_t <I>length</I>, int <I>flags</I>);
ssize_t <a href="sendmsg.html">sendmsg</a>(int <I>socket</I>, const struct msghdr *<I>message</I>, int <I>flags</I>);
ssize_t <a href="sendto.html">sendto</a>(int <I>socket</I>, const void *<I>message</I>, size_t <I>length</I>, int <I>flags</I>,
             const struct sockaddr *<I>dest_addr</I>, socklen_t <I>dest_len</I>);
int     <a href="setsockopt.html">setsockopt</a>(int <I>socket</I>, int <I>level</I>, int <I>option_name</I>,
             const void *<I>option_value</I>, socklen_t <I>option_len</I>);
int     <a href="shutdown.html">shutdown</a>(int <I>socket</I>, int <I>how</I>);
int     <a href="socket.html">socket</a>(int <I>domain</I>, int <I>type</I>, int <I>protocol</I>);
int     <a href="socketpair.html">socketpair</a>(int <I>domain</I>, int <I>type</I>, int <I>protocol</I>,
             int <I>socket_vector</I>[2]);
</code>
</pre>
<br>
</blockquote><h4>SEE ALSO</h4><blockquote>
<i><a href="accept.html">accept()</a></i>,
<i><a href="bind.html">bind()</a></i>,
<i><a href="connect.html">connect()</a></i>,
<i><a href="getpeername.html">getpeername()</a></i>,
<i><a href="getsockname.html">getsockname()</a></i>,
<i><a href="getsockopt.html">getsockopt()</a></i>,
<i><a href="listen.html">listen()</a></i>,
<i><a href="recv.html">recv()</a></i>,
<i><a href="recvfrom.html">recvfrom()</a></i>,
<i><a href="recvmsg.html">recvmsg()</a></i>,
<i><a href="send.html">send()</a></i>,
<i><a href="sendmsg.html">sendmsg()</a></i>,
<i><a href="sendto.html">sendto()</a></i>,
<i><a href="setsockopt.html">setsockopt()</a></i>,
<i><a href="shutdown.html">shutdown()</a></i>,
<i><a href="socket.html">socket()</a></i>,
<i><a href="socketpair.html">socketpair()</a></i>.
</blockquote><hr size=2 noshade>
<center><font size=2>
UNIX &reg; is a registered Trademark of The Open Group.<br>
Copyright &copy; 1997 The Open Group
<br> [ <a href="../index.html">Main Index</a> | <a href="../xshix.html">XSH</a> | <a href="../xcuix.html">XCU</a> | <a href="../xbdix.html">XBD</a> | <a href="../cursesix.html">XCURSES</a> | <a href="../xnsix.html">XNS</a> ]

</font></center><hr size=2 noshade>
</body></html>
